﻿#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // connect(this, &Widget::mysignal, this, &Widget::myslot);
    // emit mysignal();

    // 实例化学生对象和老师对象并使老师的信号和学生的槽连接
    this->tcr = new Teacher(this);
    this->sdt = new Student(this);
    connect(tcr, &Teacher::stand_up, sdt, &Student::Stand);
    emit tcr->stand_up();//硬编码发送信号

    //创建一个按钮，使用按钮的按下信号与老师的stand_up关联，从而实现点击按钮就等于老师发送stand_up
    QPushButton* btn = new QPushButton("起立",this);
    btn->move(200,200);
    connect(btn, &QPushButton::clicked, tcr, &Teacher::stand_up);

    //使用函数指针关联我们自定义的信号和槽，暂时理解为为了防止歧义
    void (Widget::*signal_q)(QString) = &Widget::mysignal;
    void (Widget::*slot_q)(QString) = &Widget::myslot;
    connect(this, signal_q, this, slot_q);
    // connect(this, &Widget::mysignal, this, &Widget::myslot);//直接这样有歧义，因为我们重写了槽和信号
    // emit mysignal();
    EmitSignal();

}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    this->close();
}

void Widget::myslot()
{
    qDebug() << "我的信号和槽";
}

void Widget::myslot(QString str)
{
    qDebug() << "我的信号和槽" << str;
}

void Widget::EmitSignal()
{
    emit mysignal("你好");
}

